<?php

namespace Protocols;
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/1/27
 * Time: 9:40
 */
/**
workerman与协议类交互流程
1、假设客户端发送一个数据包给服务端，服务端收到数据(可能是部分数据)后会立刻调用协议的input方法，用来检测这包的长度，
 * input方法返回长度值$length给workerman框架。
2、workerman框架得到这个$length值后判断当前数据缓冲区中是否已经接收到$length长度的数据，如果没有就会继续等待数据，
 * 直到缓冲区中的数据长度不小于$length。
4、缓冲区的数据长度足够后，workerman就会从缓冲区截取出$length长度的数据(即分包)，并调用协议的decode方法解包，
 * 解包后的数据为$data。
3、解包后workerman将数据$data以回调onMessage($connection, $data)的形式传递给业务，
 * 业务在onMessage里就可以使用$data变量得到客户端发来的完整并且已经解包的数据了。
4、当onMessage里业务需要通过调用$connection->send($buffer)方法给客户端发送数据时，
 * workerman会自动利用协议的encode方法将$buffer打包后再发给客户端。
 */
class JsonNL
{
    /**
     * @param $buffer:缓冲区
     * @return bool|int
     * @from 554665488@qq.com
     * @author:yfl
     * @time:
     * @describe: 分包 1.检查包的完整性，如果能够的得到包长就返回包的在buffer的长度，否者返回0继续等待数据
     *                   2.如果协议有问题，则返回false，当前客户端因此断开连接
     */
    public static function input($buffer)
    {
        //获得换行字符"\n"的位置
        $pos = strpos($buffer, "\n");
        //如果没有换行符，无法得知包长，返回0继续等待数据
        if ($pos == false) {
            return 0;
        }
        //存在换行符 返回当前包长 包括换行符
        return $pos + 1;
    }

    /**
     * @from 554665488@qq.com
     * @author:yfl
     * @time:
     * @describe: 解包 1.（当缓冲区数据长度足够的时候）：当接收到的到
     */
    public static function decode()
    {

    }

    public static function encode()
    {

    }
}